﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;


namespace DynamicAuditor.DALAuditor
{
    /// <summary>
    /// Fecha: 04-Abril-2011
    /// Autor: Alexandra Espinoza Bello
    /// Descripcion: En esta clase se va a manejar todas las operaciones correspondientes a Formularios tales como: Insercion, Actualizacion, Eliminacion
    /// y todo lo relaciona con formularios.
    /// </summary>
   public class clsFormularios
     {
               
       //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
       DynamicAuditorDataContext bd = new DynamicAuditorDataContext();

       public clsFormularios()
        { 
        
        }

        public List<DTOs.dtoFormularios> ObtenerFormularios()
        {
            int i = 0;
            List<DTOs.dtoFormularios> formularios = new List<DTOs.dtoFormularios>();

            try

            {
                var formul = (from p in bd.FORMULARIOs 
                           select p).ToList();

               foreach (FORMULARIO formulario in formul)
               {
                   formularios.Add(new dtoFormularios());
                   formularios[i].idFormulario = formulario.idFormulario;
                   formularios[i].Descripcion = formulario.Descripcion ;
                   formularios[i].Version = Convert.ToInt16(formulario.Version);
                   //formularios[i].ModificadoPor = int.Parse(formulario.ModificadoPor.ToString());
                   //formularios[i].FechaModificacion = DateTime.Parse(formulario.FechaModificacion.ToString());
                   //formularios[i].FechaCreacion = DateTime.Parse(formulario.FechaCreacion.ToString());
                   formularios[i].Titulo = formulario.Titulo;
                   formularios[i].Activo = bool.Parse(formulario.Activo.ToString());
              
                   i++;
               }

            }
            catch(Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }


            return formularios;
        }

        public DTOs.dtoFormularios ObtenerFormularioporId(int formularioid)
        {
            DTOs.dtoFormularios formulario = new DynamicAuditor.DTOs.dtoFormularios();

            try
            {
                FORMULARIO  form = bd.FORMULARIOs.Single(p => p.idFormulario == formularioid);

                formulario.idFormulario = form.idFormulario;
                formulario.Titulo = form.Titulo ;
                //formulario.ModificadoPor = int.Parse(form.ModificadoPor.ToString());
                //formulario.FechaModificacion = DateTime.Parse(form.FechaModificacion.ToString());
                //formulario.FechaCreacion = DateTime.Parse(form.FechaCreacion.ToString());
                formulario.Version  =Convert.ToInt16( form.Version);
                formulario.Descripcion = form.Descripcion;
                formulario.Activo = bool.Parse(form.Activo.ToString());
               

            }
            catch(Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }

            return formulario;
        }

        public int UpdateFormularios (DTOs.dtoFormularios formulario)
        {

            //Se retorna un 1 si el proceso se hizo correctamente de lo contrario se retorna un 0

            int x =0;

            try
            {
                FORMULARIO  formul = bd.FORMULARIOs.Single(p => p.idFormulario == formulario.idFormulario);
                formul.Titulo  = formulario.Titulo;
                formul.Activo = formulario.Activo;
                formul.Descripcion = formulario.Descripcion;
                formul.Version  = formulario.Version;
                //formul.FechaModificacion = formulario.FechaModificacion;
                //formul.ModificadoPor = formulario.ModificadoPor;
                bd.SubmitChanges();
                x = 1;

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error actualizando los datos . " + ex.Message);
                
            }
          
            return x; 

        }

        public int InsertFormularios(DTOs.dtoFormularios formulario)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;
            FORMULARIO  frm = new FORMULARIO ();

            try
            {
                frm.Titulo = formulario.Titulo ;
                frm.Activo = formulario.Activo;
                frm.Descripcion = formulario.Descripcion;
                frm.idFormulario= formulario.idFormulario;
                //frm.FechaModificacion = formulario.FechaModificacion;
                //frm.ModificadoPor = formulario.ModificadoPor;
                //frm.FechaCreacion = formulario.FechaCreacion;
                frm.Version= formulario.Version ;

                //Se procede a insertar la informacion del formulario
                bd.FORMULARIOs.InsertOnSubmit (frm);
                bd.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo insertar el formulario. " + ex.Message);
                x = 0;
            }

            x = 1;

            return x;
        }

        public int DeleteFormulario(DTOs.dtoFormularios formulario)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {
                var frm = bd.FORMULARIOs.Single(p => p.idFormulario == formulario.idFormulario);

                bd.FORMULARIOs.DeleteOnSubmit(frm);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el formulario " + ex.Message);
                x = 0;
            }
          

            return x;

        }

        public List<dtoFormularios> ObtenerFormulariosActivos()
        {
            int i = 0;
            List<dtoFormularios> formulariosactivos = new List<dtoFormularios>();

            try
            {
                var formulario = (from p in bd.FORMULARIOs 
                                  where p.Activo == true
                                  orderby p.idFormulario 
                                  select p).ToList();
                
                //Esto aplica cuando no existan clientes activos
                if (formulario.Count.Equals(0))
                {
                    formulariosactivos.Add(new dtoFormularios());
                    formulariosactivos[i].idFormulario = Convert.ToInt16 ("0");
                    formulariosactivos[i].Descripcion  = "No hay Formularios registrados";
                }
                else
                {
                    foreach (FORMULARIO  frm in formulario)
                    {

                        formulariosactivos.Add(new dtoFormularios());
                        formulariosactivos[i].Activo = Convert.ToBoolean(frm.Activo);
                        formulariosactivos[i].Descripcion = frm.Descripcion;
                        formulariosactivos[i].Version  = Convert.ToInt16 (frm.Version);
                        //formulariosactivos[i].FechaCreacion = Convert.ToDateTime(frm.FechaCreacion);
                        //formulariosactivos[i].FechaModificacion = Convert.ToDateTime(frm.FechaModificacion);
                        formulariosactivos[i].idFormulario = frm.idFormulario ;
                        //formulariosactivos[i].ModificadoPor = Convert.ToInt16(frm.ModificadoPor);
                        formulariosactivos[i].Titulo = frm.Titulo;
                        i++;

                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return formulariosactivos;

        }
        
        


        
    }
}
